\documentclass[format=sigconf]{acmart}
\usepackage[utf8]{inputenc}

\def\inputfig#1{\input #1}
\def\inputtex#1{\input #1}
\def\inputal#1{\input #1}
\def\inputcode#1{\input #1}

\inputtex{logos.tex}
\inputtex{refmacros.tex}
\inputtex{other-macros.tex}

\acmConference[ELS'20]{the 13th European Lisp Symposium}{April 27--28 2020}{%
  Zürich, Switzerland}
\acmISBN{978-2-9557474-3-8}
\acmDOI{10.5281/zenodo.2634314}
\startPage{1}
\setcopyright{rightsretained}
\copyrightyear{2020}

\begin{document}
\title{Tying the knot\\{\smaller Creating the cyclic graph of \commonlisp{} metaobjects}}

\author{Robert Strandh}
\email{robert.strandh@u-bordeaux.fr}

\affiliation{
  \institution{LaBRI, University of Bordeaux}
  \streetaddress{351 cours de la libération}
  \city{Talence}
  \country{France}}

\begin{abstract}
After the first few phases of bootstrapping in the \sicl{} system, we
have an acyclic graph of metaobjects where the class of an object in
some first-class global environment is an object in a preceding
environment.  Furthermore, while the method functions of a generic
function in some environment $E_n$ belong to $E_n$ as well, this is
not the case for the effective-method functions and the discriminating
function, which turn individual method functions into a single
function for the entire generic function.  As a result of how the
bootstrapping procedure is designed, these components instead belong
to $E_{n-1}$, resulting in what we call an \emph{impure} object.
Before an executable \sicl{} system can be created, every component of
an object in some environment $E_n$ must belong to $E_n$ as well.  In
other words, every object must be pure.

In this paper, we describe a technique for turning the
effective-method functions and the discriminating function of every
generic function in some environment $E_n$ into functions that belong
to $E_n$ as well.  An important property of our technique is that it
must not introduce metastability problems, and we describe how we
aviod this potential problem.
\end{abstract}

\begin{CCSXML}
<ccs2012>
<concept>
<concept_id>10011007.10011006.10011041</concept_id>
<concept_desc>Software and its engineering~Compilers</concept_desc>
<concept_significance>500</concept_significance>
</concept>
<concept>
<concept_id>10011007.10011006.10011008.10011009.10011021</concept_id>
<concept_desc>Software and its engineering~Multiparadigm languages</concept_desc>
<concept_significance>300</concept_significance>
</concept>
</ccs2012>
\end{CCSXML}

\ccsdesc[500]{Software and its engineering~Compilers}
\ccsdesc[300]{Software and its engineering~Multiparadigm languages}

\keywords{\clos{}, \commonlisp{}, Compilation, Bootstrapping}

\maketitle


\inputtex{sec-introduction.tex}
\inputtex{sec-previous.tex}
\inputtex{sec-sicl.tex}
\inputtex{sec-our-method.tex}
\inputtex{sec-benefits.tex}
\inputtex{sec-conclusions.tex}
\inputtex{sec-acknowledgments.tex}

\bibliographystyle{plainnat}
%\bibliographystyle{abbrv}
\bibliography{tying-the-knot}
\end{document}
